package day05;

//一组小伙伴(人数8到15人随机)排队报数
//从1开始报, 报到3的人踢出队伍
//后面的人从1开始重新报数, 报到3的人踢出队伍, 依此循环
//如果报数到了队尾, 则回到队首继续报, 直到队伍中只剩下一个人
//求, 此人在原队伍中的位置

public class Homework {
	public static void main(String[] args) {

		// 人数(随机值)
		int count = (int) (Math.random() * 8 + 8);
		System.out.println("队伍有" + count + "人");

		// 根据随机人数创建int类型数组
		// 该数组元素初始都是0
		// 在遍历报数过程中, 当某个元素报3时
		// 将该元素值置为-1, 表示其被踢出队伍, 失去报数资格
		int[] arr = new int[count];

		// 表示报数的元素
		int say = 0;

		// 表示数组元素的索引
		int index = 0;

		while (true) {
			// 判断当前遍历元素是否为可报数元素
			if (arr[index] == 0) {
				++say; // 该元素报数
				// 报完数之后判断报数值是否为3;
				if (say == 3) {
					// 如果报的是3, 将该元素置为-1, 表示失去报数资格
					arr[index] = -1;
					// 元素被踢出后, 将报数元素重置
					say = 0;
					// 每踢出一个报数元素, 队伍可报数人数少1
					count--;
					// 每减一个人, 判断一下队伍是否只剩1人
					if (count == 1) {
						// 如果只剩1人, 游戏结束
						break;
					}
				}
			}

			index++;
			// 判断index是否大于最大索引值
			// 如果是, 将index重置为0, 表示回到队首
			if (index > arr.length - 1) {
				index = 0;
			}
		}

		// 循环结束, 表示队伍中只剩下一人
		// 找出该元素
		// 对数组遍历, 找出为0的元素
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 0) {
				System.out.println(i);
				break;
			}
		}

	}
}
